package com.study.juc.interrupt;

import java.util.concurrent.TimeUnit;

/**
 * @program: juc-study
 * @author: jzhou
 * @date: 2022-08-13 15:51
 * @version: 1.0
 * @description: 打断异常
 * 如果该线程阻塞的调用 wait() ， wait(long) ，或 wait(long, int)的方法Object类，
 * 或的join() ， join(long) ， join(long, int) ， sleep(long) ，或sleep(long, int) ，
 * 这个类的方法，那么它的中断状态将被清除，并且将收到InterruptedException 。
 **/
public class InterruptDemo2 {
	public static void main(String[] args) {
		Thread t1 = new Thread(() -> {
			while (true) {
				if (Thread.currentThread().isInterrupted()) {
					System.out.println(Thread.currentThread().getName() + "线程------isInterrupted = true,自己退出了");
					break;
				}
				// 加了这段代码程序会异常
				try {
					TimeUnit.MILLISECONDS.sleep(200);
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt(); // 为什么要做异常处再调一次 ，没有它程序不会停止
					e.printStackTrace();
				}
				System.out.println("-------hello isInterrupted api");
			}
		}, "t1");

		t1.start();

		//暂停几秒钟线程
		try {
			TimeUnit.MILLISECONDS.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		new Thread(() -> {
			t1.interrupt();
		}).start();
	}

}
